[アップデート] CodePipeline でステージ条件を設定できるようになりました
こんにちは、中川です。
AWS CodePipeline V2 でステージ条件を設定できるようになり、条件に基づいて動作するパイプラインを構築できるようになりました。
ステージ条件とは、各ステージの開始前または終了時に判定されるルールを設定し、そのルールが満たされた場合にそのステージをエラー終了やロールバックできる機能です。
具体的には以下の図のようなステージ条件を使ったパイプラインを組むことができます。
条件はステージごとに「入力条件」「成功条件」「終了条件」から選択し、1 つのステージ内で複数の条件を組み合わせて使うことができます。
条件にはオプションで条件を満たさないときの動作(結果オプション)を指定でき、指定できる動作は条件によって決まっています。
また、条件は上書きすることが可能です。例えば、時間外で条件を満たさず失敗したときに、上書きすることで強制的に後続の処理を開始させることができます。
条件 | 説明 | 結果オプション |
---|---|---|
入力条件 | ステージの開始前にチェックする条件。条件を満たすとステージが開始されます。 | 失敗 |
成功条件 | ステージ終了後、アクションが成功したときにチェックする条件。 | 失敗 |
終了条件 | ステージ終了後、アクションが失敗したときにチェックする条件。 | 失敗 または ロールバック |
条件の中では判定に使うルールとして「DeploymentWindow」「CloudWatchAlarm」「LambdaInvoke」から選んで利用できます。
ルール | 説明 |
---|---|
DeploymentWindow | デプロイを許可する時間枠のデプロイメントウインドウを設定します。ルールは Cron 式で指定し、式の時間内であるかによって判定されます。Cron 式はこちらを参照します。 |
CloudWatchAlarm | CloudWatchイベントから設定されたアラームをチェックして、アラーム状態が OK または INSUFFICIENT_DATA であれば成功と判定されます。 |
LambdaInvoke | Lambda関数を呼び出して、そのレスポンスにより判定されます。 |
ステージ条件を活用することで、
- CloudWatch アラームでワークロードの状態を定義。アラームによって正常でない場合はデプロイを開始しない
- デプロイ前にデプロイメントウィンドウの時間内かチェックして、時間外の場合はデプロイを開始しない
などといった、安全なリリースをできるようになります。
やってみた
以下のように、ソース, ビルド, デプロイを定義したパイプラインを用意します。
検証1 入力条件で CloudWatch アラームの状態をチェックする
1 つめの検証では、入力条件 とルール CloudWatchAlarm の確認をします。
ビルドステージに入力条件を追加し、CloudWatch アラームを指定します。
アラームの状態が「OK」のときはビルドが開始され、状態が「アラーム」のときにはビルドが失敗することを確認します。アラームは事前に作成しているものを使用します。
マネージメントコンソールから入力条件を作成していきます。
パイプラインの編集画面から[ステージを編集する]をクリックします。
[入力条件を追加]をクリックします。
ルールプロバイダーで AWS CloudWatchAlarm、アラーム名で対象のアラームを選択したら、[完了]をクリックします。
パイプラインの編集画面を閉じて、パイプラインの実行をします。
結果、入力条件に成功して、ビルドが開始されていることを確認しました。
続いて、アラートで出した状態で実行してみます。
結果、入力条件に失敗して、期待通りビルドが止まっていることを確認しました。
検証2 成功条件でデプロイウィンドウ内かチェックする、条件の上書きを使う
2 つめの検証では、成功条件とルール DeploymentWindow を確認します。
ビルドステージに成功条件を追加して、デプロイメントウインドウで Cron 式を指定します。
最初に、デプロイメントウインドウの時間内のときは後続のデプロイステージが開始されることを確認します。
次に、デプロイメントウインドウの時間外で動作させたときを確認し、また、条件の上書きを実行して時間外でもデプロイステージを開始できることを確認します。
検証 1 と同じようにパイプラインの編集画面から[ステージを編集する]を開き、今回は[成功条件を追加]をクリックします。
ルールプロバイダーで AWS DeploymentWindow、cron で * * 0-18 ? * MON-THU *
、タイムゾーンで JST を入力したら、[完了]をクリックします。※日本語コンソールだと説明の式では設定できないため注意します。
デプロイメントウインドウの時間内にパイプラインを実行すると、成功することを確認できました。
次にデプロイメントウインドウの期間を変更し、デプロイメントウインドウの時間外での動作を確認します。
ここでは月曜日から金曜日の 9 時から 18 時をデプロイメントウインドウとして設定しています。
パイプラインを実行すると、進行中のステータスでウインドウが開けるまで待機していました。
では、この状態で[上書き条件]をクリックしてみます。
すると成功条件が上書きされて、デプロイステージが開始しました。
検証は以上です。
入力条件、成功条件、上書き条件、ルール CloudWatchAlarm、DeploymentWindow について確認することができました。
さいごに
AWS CodePipeline V2 でステージ条件を設定できるようになり、条件に基づいて動作するパイプラインを構築できるようになりました。
ステージ条件を活用することで、デプロイのタイミングや環境の状態を細かくチェックできるので、安心してデプロイを進めることができます。
CodePipeline を利用している環境で、ワークロードにあった条件を検討してみてはいかがでしょうか。